package n7_wait_notify;


import lombok.extern.slf4j.Slf4j;

import static utils.Sleeper.sleep;

/*
---------------------------------------------------------
|
|   wait() notify() notifyAll() 方法使用
|
|========================================================
 */
@Slf4j(topic = "c.T")
public class T2_WaitNotify_and_NotifyAll {

    final static Object obj = new Object();


    public static void main(String[] args) {

        new Thread(() -> {
            synchronized (obj) {
                log.debug("执行....");
                try {

//                    obj.wait(); // 让线程在obj上一直等待下去
                    obj.wait(1000); // 一秒内没叫醒 将不再等待向下执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其它代码....");
            }
        }, "t1").start();

        new Thread(() -> {
            synchronized (obj) {
                log.debug("执行....");
                try {
                    obj.wait(); // 让线程在obj上一直等待下去
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其它代码....");
            }
        }, "t2").start();

        // 主线程两秒后执行
        sleep(0.5);
        log.debug("------------------唤醒 obj 上其它线程-------------------");
        synchronized (obj) {
//            obj.notify(); // 唤醒obj上一个线程
             obj.notifyAll(); // 唤醒obj上所有等待线程
        }
    }


}